import ctypes
import sys


def dpi_fitting(tk_root):
    """通过一种神奇的方式实现分辨率适配,需要输入tk的主窗口对象
        必须在tkinter绘制任何小组件之前调用该函数，否则不会有任何作用"""
    # 该方法只在Windows上适用。其他系统上，则不做任何操作
    if sys.platform.startswith('win'):
        # 告知系统分辨率由该应用自行设置
        ctypes.windll.shcore.SetProcessDpiAwareness(1)
        # 获取当前显示器的缩放率（以%为单位，比如返回200就是200%的缩放）
        ScaleFactor = ctypes.windll.shcore.GetScaleFactorForDevice(0)
        # 由缩放率计算出dpi并调用tk的缩放函数
        # 每1%的缩放率对应1/72的dpi。也就是说，正常100%缩放率屏幕的dpi为72
        # 在缩放比例为100%的显示器上，tk都不会出现问题。
        # 我的电脑问题是因为它是2k屏，windows需要200%的缩放率才能让应用达到正常大小
        tk_root.tk.call('tk', 'scaling', ScaleFactor / 72)
